import {
  Entity,
  Column,
  PrimaryGeneratedColumn,
  CreateDateColumn,
  UpdateDateColumn,
  ManyToOne,
  JoinColumn,
} from 'typeorm';
import { User } from '../../user/entities/user.entity';
@Entity()
export class Application {
  @PrimaryGeneratedColumn()
  aid: number;

  @Column({ name: 'user_id', comment: '用户id' })
  user_id: number;

  /**
   * 这是一个多对一关系的装饰器，表示多个Application实体可以关联到一个User实体
   * () => User：这是目标实体类的引用，指向User实体。
   * user => user.uid：这是一个反向关系的引用，表示在User实体中通过哪个属性来引用回Application实体
   */
  @ManyToOne(() => User, user => user.applications, { onUpdate: 'CASCADE', onDelete: 'RESTRICT' })
  @JoinColumn({ name: 'user_id', foreignKeyConstraintName: 'fk_application_user_id' }) // 这个装饰器用于指定外键列
  user: User; // 表示Application实体有一个名为user的属性，类型为User

  @Column({ comment: '应用名称', default: '未命名应用', nullable: true })
  name?: string;

  @Column({ comment: '图标', nullable: true })
  icon?: string;

  @Column({ comment: '应用图片地址', default: '', nullable: true })
  image_url?: string;

  @Column({
    comment: '背景颜色',
    type: 'json',
    transformer: {
      to: (value: string) => JSON.stringify(value), // 存储时： 把 JS 数据写入数据库
      from: (value: string[]): string[] => value, // 查询时： 把数据库数据转回 JS 对象
    },
    nullable: true,
  })
  bg_color?: string[];

  @Column({ comment: '背景颜色类型', nullable: true })
  bg_color_type?: string;

  @Column({ comment: '是否收藏', default: '0' })
  is_collect?: string;

  @Column({ comment: '应用点击次数', default: 0 })
  click_count: number;

  @CreateDateColumn({ comment: '创建时间' })
  create_time?: Date;

  @UpdateDateColumn({ comment: '更新时间' })
  update_time?: Date;
}
